var xlsx = require('node-xlsx');
var fs = require('fs');
const OSS = require('ali-oss')
const axios = require('axios')


// 连接oss
const client = new OSS({
    bucket: 'jt-report',
    // region以杭州为例（oss-cn-hangzhou），其他region按实际情况填写。
    region: 'oss-cn-shanghai',
    // 阿里云主账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维，请登录RAM控制台创建RAM账号。
    accessKeyId: 'LTAI4G5Qj5RWmADie7tu8vh5',
    accessKeySecret: '2VSjtTngJA0ey1REklxzPA0TQH2UEB',
});

// 分片进度条
const progress = (p, _checkpoint) => {
    console.log(p); // Object的上传进度。
    // console.log(_checkpoint); // 分片上传的断点信息。
};

// 时间处理
function toHour(time) {
    // 批量处理-数据中分钟数转换为小时
    if (time) {
        return (Math.floor(time / 60) + '小时' + (time % 60) + '分')
    }
}

const range = {
    s: {
        c: 0,
        r: 0
    },
    e: {
        c: 0,
        r: 0
    }
}; // A1:A4



// 文件流转化成xlsx并获取本地地址
async function FsWrite(params, arr, title, reply ,special) {
    /*
    params 前端传参
    arr    要处理的数据
    title  表头
    special 特殊处理
    **/
    let rowData = []
    if(special && special.title2){
        // 增加二级表头【暂弃用，未研究出1级表头如何合并】
        rowData.unshift(special.title2)
    }
    params.createTime = new Date(params.createTime).getTime()
    arr.forEach((ele) => {
        var result = []
        Object.values(ele).forEach((value) => {
            result.push(value)
        })
        rowData.push(result)
    })
    const data = [title, ...rowData]
    // 新增col最小宽
    let cols_arr = []
    for (let x = 0; x < title.length; x ++){
        cols_arr.unshift({
            wpx: 100,
            align: 'center'})
    }
    const options = {
        '!merges': [range],
        '!cols': cols_arr
    };
    var buffer = xlsx.build([{
        name: "极兔速递",
        data: data
    }], options); // Returns a buffer
    fs.writeFileSync('./' + params.modelName + params.createTime + '.xlsx', buffer, {
        'flag': 'w'
    }) // 生成excel文件
    console.log(1111)
    return await ossPut(params,reply)
}


// 本地文件上传oss
async function ossPut(params,reply) {
    params.createTime = new Date(params.createTime).getTime()
    let result = await client.put("数据导出/" + params.modelName + params.createTime + '.xlsx', './' + params.modelName + params.createTime + '.xlsx')
    if(result.res.status === 200 ){
        fs.unlinkSync('./' + params.modelName + params.createTime + '.xlsx')
        let url = await client.signatureUrl("数据导出/" + params.modelName + params.createTime + '.xlsx'); //获取真实文件下载地址
        let insertStart = await insert(params,url,reply)
        return insertStart.data
    }else {
        return {
            "code": 0,
            "msg": "失败",
        }
    }
}

// 上传oss成功后上传深圳
async function insert(params,url,reply) {
    let source = 1; // 测试/生产为1, UAT为0
    let addressUrl;
    switch (process.env.NODE_ENV) {
        case 'dev':
            source =  1
            addressUrl = 'http://192.168.1.214:30525/download/report/file/insert'
            break;
        case 'test':
            source =  1
            addressUrl = 'http://test-jmsgw.jms.com/businessindicator/import/file/insert'
            break;
        case 'uat':
            source =  0
            addressUrl = 'https://uat-jmsgw.jtexpress.com.cn/businessindicator/import/file/insert'
            break;
        case 'prod':
            source =  1
            addressUrl = 'https://jmsgw.jtexpress.com.cn/businessindicator/import/file/insert'
            break;
        default:
            source =  1
            addressUrl = 'https://jmsgw.jtexpress.com.cn/businessindicator/import/file/insert'
            break;
    }
    const data =  {
        "networkCode": params.networkCode,
        "networkName": params.networkName,
        "userId": params.userId,
        "userName": params.userName,
        "modelId": params.modelId,
        "status": 2,
        "source": source,
        "downUrl": url,
        "version": params.version,
        "createTime": params.createTime,
        "updateTime": params.updateTime,
        "remark": params.remark,
        "modelName": params.modelName
    }
    console.log(addressUrl)
    return axios({
        method: 'POST',
        url: addressUrl,
        data: data,
        headers: {'routeName': reply.request.headers.routename,'authToken':reply.request.headers.authtoken}//设置header信息
    })
    .then((res) => {
        console.log(1111 , process.env.NODE_ENV)
        if(process.env.NODE_ENV === 'dev' || process.env.NODE_ENV === 'test'){
            res.data.url = url
        }
        console.log(res)
        return res
    }).catch((err) => {
        console.log(err)
        return err.response
    })
}


module.exports = {
    FsWrite,
    insert
}



